package dca.sistemascontrole.travas;

import dca.sistemascontrole.exception.LogManager;

/**
 *
 * @author Rafael
 */
public class GerenciadorDeTravas {

    private static final float VAZIO = 3;
    private static final float CHEIO = 27;
    private static final float MUITO_CHEIO = 28;

    private static boolean testarNivelTankSuperior(double nivel) throws TravaTanqueSuperiorCheio, TravaTanqueSuperiorVazio, TravaTanqueSuperiorMuitoCheio {
        if (nivel > MUITO_CHEIO) {
            throw new TravaTanqueSuperiorMuitoCheio();
        }

        if (nivel > CHEIO) {
            throw new TravaTanqueSuperiorCheio();
        }

        if (nivel < VAZIO) {
            throw new TravaTanqueSuperiorVazio();
        }

        return true;
    }

    public static double ajustarAsTravas(double nivelTanqueSuperior, double nextValue) {
        if (nextValue > 3) {
            nextValue = 3;
        }else if(nextValue < -3){
            nextValue = -3;
        }
        
        
        try {
            GerenciadorDeTravas.testarNivelTankSuperior(nivelTanqueSuperior);
        } catch (TravaTanqueSuperiorCheio ex) {
            if (nextValue > 1.83) {
                nextValue = 1.83;
            }
            LogManager.logWarning("Tanque superior está cheio.");
        } catch (TravaTanqueSuperiorVazio ex) {
            if (nextValue < 0) {
                nextValue = 0;
            }
            LogManager.logWarning("Tanque superior está vazio");
        } catch (TravaTanqueSuperiorMuitoCheio ex) {
            nextValue = 0;
            LogManager.logWarning("Tanque superior está muito cheio");
        }

        return nextValue;
    }
}
